<?php
/**
 * File: F_Array.php
 * Functionality: Extra array functions
 * Author: Nic XIE
 * Date: 2012-03-01
 */

// Check a var is a multi array or not
function isMultiArray($arr){
	if(empty($arr)) return false;

	if(!is_array($arr)){
		return false;
	}else{
		foreach($arr as $a){
			if(is_array($a)){
				return true;
			}
		}
		return false;
	}
}


/**
 * Multi array unique
 */
function multiArrayUnique($arr){
	foreach($arr as $k => $v){
		foreach($arr as $key => $value){
			if($k != $key){
				$v1 = json_encode($v);
				$v2 = json_encode($value);
				if($v1 == $v2){
					unset($arr[$k]);
				}
			}
		}
	}
	sort($arr);
	return $arr;
}


// Convert object to array
function object2Array($obj) {
	if(is_object($obj)){
		$obj = get_object_vars($obj);
	}

	return is_array($obj) ? array_map(__FUNCTION__, $obj):$obj;
}


// Convert array to object
function array2Object($arr) {
	return is_array($arr) ? (object) array_map(__FUNCTION__, $arr):$arr;
}


// 通过数组的值获取数组的 key
function getArrayKey($arr, $value) {
 	if(!is_array($arr)){
 		return null;
 	}
 	
 	foreach($arr as $k =>$v) {
  		$return = getArrayKey($v, $value);
  		if($v == $value){
   			return $k;
  		}
  			
  		if(!is_null($return)){
   			return $return;
  		}
 	}
}

//判断某个字符串是否包含一个数组中的某个值
function check_in($arr, $text){
    if(!is_array($arr)){
     	return null;
    }
	
    foreach($arr as $key){
		if(strstr($text, $key) != ''){
			$result = $key;
			break;
		}
	}
	
	if($result == ''){
		foreach($arr as $key){
			if(strstr($text, mb_substr($key, 0, 1, 'utf-8')) != ''){
				$result = $key;
				break;
			}
		}
	}
	return $result;
}

//以数组的形式保存数组
function arraySave($array, $file, $arrayName = false) {
	$data = var_export($array, true);
	if (!$arrayName) {
	   $data = "<?php\n return " .$data.";\n?>";
	} else {
	   $data = "<?php\n " .$arrayName . "=" .$data . ";\n?>";
	}
	return file_put_contents($file, $data);
}

/**
*  说明:二维数组去重
*  @param    array2D    要处理二维数组
*  @param    stkeep     是否保留一级数组键值(默认不保留)
*  @param    ndformat   是否保留二级数组键值(默认保留)
*  @return   output     返回去重后的数组
*/
function unique_arr($array2D, $stkeep = false, $ndformat = true) {
	if($stkeep){    //一级数组键可以为非数字
		$stArr = array_keys($array2D);
	}
	
	if($ndformat){   //二级数组键必须相同
		$ndArr = array_keys(end($array2D));
	}
	
	foreach ($array2D as $v){  //降维
		$v = join(',', $v);
		$temp[] = $v;
	}
	
	$temp = array_unique($temp);
	foreach ($temp as $k => $v){  //数组重新组合
		if($stkeep){
			$k = $stArr[$k];
		}
		
		if($ndformat){
			$tempArr = explode(",",$v);
			foreach($tempArr as $ndkey => $ndval){
				$output[$k][$ndArr[$ndkey]] = $ndval;
			}
		}else{
			$output[$k] = explode(",",$v);
		}
	}
	return $output;
}

/**
 * 
 * 将二维数组转换成一维数组
 * @param array $array 待转换的二维数组
 * @param string $glue 需要转换的键  如id
 */
function swapDoubleToSingle($array, $glue){
    $tmp = array();
	if($array) {
		foreach($array as $v) {
			$tmp[] = $v[$glue];
		}
	}
	
    return $tmp;
}
    
/**
 * 
 * 将二维数组转换成对应格式的二维数组
 * @param array $array 待转换的二维数组
 * @param string $glue 需要转换的键,如id
 */
function swapDoubleToDouble($array, $glue){
    $tmp = array();
	if($array) {
		foreach($array as $v) {
			$tmp[$v[$glue]] = $v;
		}
	}
    return $tmp;
}